﻿using System;
using System.ComponentModel.DataAnnotations;
using DiNinject.EfModel;
using DiNinject.Repository.Interfaces;
using DiNinject.Web.UI.Models.Autos.ModelInterfaces;
using Ninject;

namespace DiNinject.Web.UI.Models.Autos
{
    public class AutoEditModel : IAutoEditModel
    {
        #region Member
        public int Id { get; set; }

        [Required]
        public string Marke { get; set; }

        [Required]
        public string Nummernschild { get; set; }
        #endregion

        #region Public Functions
        public void Load()
        {
            Marke = string.Empty;
            Nummernschild = string.Empty;
            Id = 0;
        }

        /// <summary>
        /// Füllen unseres Models mit den passenden Daten.
        /// </summary>
        /// <param name="autoId"></param>
        /// <param name="autoRespository">Autorepository für die Abfragen</param>
        public void Load(int autoId, IAutoRespository autoRespository)
        {
            try
            {
                var auto = autoRespository.Load(autoId);
                if (auto == null)
                {
                    //TODO Fehlermeldungen kapseln, damit diese entsprechend im View angezeigt werden kann.
                    return;
                }

                Id = autoId;
                Marke = auto.Marke;
                Nummernschild = auto.Nummernschild;
            }
            catch (Exception exception)
            {
                //TODO Fehlermeldungen kapseln, damit diese entsprechend im View angezeigt werden kann.
            }
        }

        /// <summary>
        /// Speichern oder Aktualisieren der aktuellen Modeldaten
        /// </summary>
        public void SaveOrUpdate(IAutoRespository autoRespository)
        {
            try
            {
                Auto auto = new Auto();
                auto.Id = Id;
                auto.Marke = Marke;
                auto.Nummernschild = Nummernschild;

                var savedAuto = autoRespository.AddOrUpdateAuto(auto);
                Id = savedAuto.Id;
            }
            catch (Exception exception)
            {
                //TODO Fehlermeldungen kapseln, damit diese entsprechend im View angezeigt werden kann.
            }
        }
        #endregion
    }
}